前一天我完成了主線階段限制,讓玩家不能提前觸發後面的劇情。玩家必須先完成「村長 → 酒館 → 村長」這段流程,任務才會推進到下一個階段。
Day 24 接續這個任務階段。玩家完成第二次村長對話後,目前任務目標會變成:
前往武器鋪,詢問拳套與符文情報今天的重點不是完整戰鬥系統,而是把武器匠鋪做成一個真正能使用的主線場景。玩家要能從村莊進入武器匠鋪,能和武器匠對話,也能在店內打開拳套與符文交易介面。同時,這一天也正式把裝備方向改成「拳套 + 符文」。主角不再去找一把傳說武器,也不再把刀劍當成主要攻擊方式,而是透過拳套承受符文力量。後續真正能對洞穴 Boss 生效的,不是普通武器,而是傳說符文「雷痕符文」。
這個調整也比較符合目前角色素材。主角本身比較適合赤手空拳戰鬥,如果硬把一把武器掛在角色旁邊,它看起來會像武器自己在工作,角色只是在旁邊精神支持。這種畫面實在很難說服自己那叫攻擊動畫。
首先,我建立 WeaponShopInteriorScene,作為武器匠鋪的室內場景。

武器匠鋪室內背景使用 ChatGPT 影像生成做出一張完整 2D 鐵匠鋪圖片,再放進 Unity 當作場景背景。場景中的背景物件是 weapon_scene_0,位置約為 (0, 0, 0),縮放約為 (0.6, 0.6, 1)。
這張背景圖裡已經包含鍛造爐、展示架、櫃台、工具和材料堆,所以 Day24 不再使用 Tilemap 一格一格拼室內。
這樣可以先快速建立武器匠鋪的空間感,讓後續碰撞箱、NPC、轉場點和交易區都有明確位置可以放。
這裡不是完全放棄 Tilemap,而是依照當天目標選擇比較有效率的方式。Day24 的重點是主線場景和交易功能,不是花一天慢慢拼木地板。
背景放好後,接著補上室內碰撞。

背景圖本身只是視覺,如果沒有碰撞箱,玩家仍然可以穿過牆面、櫃台、展示架和鍛造爐。
因此我建立 WeaponShopCollision,用多個 BoxCollider2D 阻擋牆面、展示架、櫃台、鍛造爐與雜物區。
這一步讓武器匠鋪不只是漂亮背景,而是可以實際探索的室內場景。玩家能在店內移動,但不能穿過櫃台,也不能踩進鍛造爐。

在 WeaponShopInteriorScene 中,我建立兩個點位:
Entry_FromVillage
Exit_ToVillage
Entry_FromVillage 是玩家從村莊進入武器匠鋪後的出生點。
Exit_ToVillage 則是玩家離開店鋪、回到村莊的出口。
Exit_ToVillage 有 BoxCollider2D,並勾選 Is Trigger,同時掛上 SceneTransitionPoint。它的目標場景指向 VillageScene,目標出生點指向 Entry_FromWeaponShop。
這樣玩家從店內出口離開後,就會回到村莊武器匠鋪外面。
室內端完成後,還要回到 VillageScene 設定村莊進入武器匠鋪的轉場點。

在村莊武器匠鋪門口,我建立 Exit_ToWeaponShop。
它同樣使用 BoxCollider2D 作為 Trigger,並掛上 SceneTransitionPoint。
Target Scene Name 設定為:
WeaponShopInteriorScene
Target Spawn Point Name 設定為:
Entry_FromVillage
這一步把村莊外觀和室內場景接起來。
玩家不只是看到一棟武器匠鋪,而是真的可以從村莊走進店內。這對主線很重要,因為玩家從村長家取得任務後,下一步就是到這裡詢問拳套與符文情報,接著,我放置武器匠 NPC。

在 WeaponShopInteriorScene 中,我建立 BlacksmithNPC,讓武器匠站在店內櫃台或工作區附近。
這個物件有 SpriteRenderer 顯示 NPC 圖像,也有 BoxCollider2D 作為本體碰撞箱。
NPC 本體的 BoxCollider2D 沒有勾選 Is Trigger,因為它的用途是阻擋玩家。
玩家可以靠近武器匠,但不能直接穿過他。Sorting Order 也需要調整,確保武器匠顯示在地板和背景物件之上。
不過,NPC 本體只負責阻擋,真正用來觸發對話的是另一個互動區。

我在武器匠前方建立 BlacksmithInteractionArea。
這個物件有 BoxCollider2D,並勾選 Is Trigger,同時掛上 NpcDialogueInteraction。互動提示設定為:
按 E 與武器匠交談
這樣 NPC 本體和對話觸發區就分開了。
玩家靠近互動區後按 E,才會開始主線對話。這種做法可以讓 NPC 保持實體碰撞,同時讓互動範圍更寬一點,不需要玩家貼到 NPC 臉上才觸發對話。

武器匠這段主線對話不能一開始就出現。
只有玩家完成村長與酒館流程後,任務階段變成 AskBlacksmith,武器匠才會講拳套與符文情報。
因此我在 NpcDialogueInteraction 中啟用 Use Dialogue Sequences,設定:
Required Quest Stage = AskBlacksmith
同時使用 Use Speaker Lines,讓對話框可以顯示主角和武器匠輪流說話。
對話完成後,目前目標會更新為:
前往森林,調查五色寶光
主線階段則推進到:
ForestInvestigation
這段設定的目的,是避免劇情跳關。
如果玩家一開始就能問到赤鋒符文和雷痕符文,那前面的村長、酒館和第二次回報都會變得很奇怪。接著進入 Play Mode 測試武器匠主線對話。

玩家靠近武器匠後按 E,會出現主角與武器匠的對話。
這段不是單純 NPC 獨白,而是主角和武器匠互相問答。
對話中需要說清楚幾件事:
主角主要靠拳套戰鬥,不把刀劍當作主武器。
低階符文和普通拳套只能用來清小怪。
精鐵拳套可以承受更高階符文。
赤鋒符文是昂貴的史詩符文,能對森林精英怪造成可觀傷害。
雷痕符文不是商品,而是在森林深處寶箱裡。
雷痕符文才是洞穴 Boss 主線的關鍵。
這段對話把玩家從村莊調查引導到森林探索。
村長只知道洞穴 Boss 不能靠普通攻擊傷到,但武器匠知道真正原因:Boss 的弱點不是普通武器,而是能把雷電導入拳套的古老符文。最近酒館年輕人提到的森林五色寶光,很可能就是雷痕符文重新現身的線索。
對話完成後,測試任務目標是否正確更新。

玩家把武器匠對話點完後,左上角任務 UI 會顯示:
前往森林,調查五色寶光
這代表武器匠對話不只是文字演出,而是真的推進了任務狀態。
Day25 的森林戰鬥,就是從這個目標接下去。
完成劇情對話後,接著設定拳套與符文交易區。

武器匠同時負責劇情與交易,所以按鍵必須拆開。
E 是交談,T 是交易。
我建立 WeaponShopTradingArea,加上 BoxCollider2D 並勾選 Is Trigger,再掛上 WeaponShopInteraction。交易提示設定為:
按 T 打開拳套與符文交易
交易區可以放在櫃台附近,不必和 NPC 對話區完全重疊。
這樣玩家靠近武器匠按 E 是推進劇情,站到櫃台附近按 T 才是打開交易畫面。兩種互動分開後,就不會發生同一顆按鍵同時觸發對話和商店的災難。人類設計 UI 時已經很常犯錯,這裡至少先少犯一個,接著測試交易畫面。

玩家走進 WeaponShopTradingArea 後按 T,會打開交易介面。
畫面中可以看到:
交易介面標題 拳套與符文
玩家金幣
目前拳套
目前符文
拳擊總傷害
商店販售清單
玩家背包清單
交易畫面同時顯示商店和背包。
玩家可以買拳套、買符文、出售掉落物,也可以在背包中切換目前裝備。
其中 赤鋒符文 價格很高,玩家第一次通常買不起。
這樣設計是為了讓玩家先去森林清小怪、取得金幣與掉落物,再回到武器匠鋪購買赤鋒符文。它是挑戰森林精英怪前的重要目標,不是一開始就塞給玩家的免費禮物。遊戲需要一點壓力,不然玩家只是在逛街。
最後用一張圖收尾 Day24 的完成狀態。

這張可以使用 Play Mode 中主角站在武器匠鋪內的畫面,同時看到主角、武器匠和店鋪背景。
也可以使用交易畫面搭配任務目標,表示武器匠鋪已經具備主線和交易功能。
到這裡,武器匠鋪已經具備三個核心功能:
場景可進出。
NPC 可對話。
商店可交易。
接著,我整理 Day24 幾段重要程式碼,讓文章能說明工具背後到底做了什麼,而不是只寫「按工具完成」。按工具固然輕鬆,但文章如果只剩按鈕介紹,那就很像 Unity 選單觀光日記。

Day24WeaponShopOrganizer.cs 的第 11 到 28 行集中定義 Day24 會用到的場景名稱、場景路徑、背景圖路徑、圖示資料夾和任務目標。
其中 VillageSceneName 和 WeaponShopSceneName 用來指定村莊與武器匠鋪室內場景。
WeaponShopScenePath 和 WeaponShopBackgroundPath 則告訴工具要建立哪個場景、讀取哪張背景圖。
GeneratedWeaponFolder 指向拳套與符文圖示所在資料夾。
ForestObjective 則是武器匠對話完成後要顯示的目標文字。
這些常數集中管理,可以避免後面建立 NPC、互動區、交易區或任務目標時手動輸入錯字。錯字這種東西看起來小,實際上很會浪費生命。

Day24WeaponShopOrganizer.cs 第 67 到 78 行建立拳套與符文商品資料。
這裡包含普通拳套、精英拳套、低階符文、精英符文、史詩符文和傳說符文資料,例如:
練習拳套
皮革拳套
精鐵拳套
裂紋符文
微光符文
焰紋符文
守心符文
赤鋒符文
雷痕符文
普通與精英裝備可以讓玩家刷森林小怪。
赤鋒符文 是昂貴的史詩符文,用來挑戰森林精英怪。
雷痕符文 雖然寫在資料裡,但它不是商店商品,而是後續森林寶箱和 Boss 主線要用的關鍵道具。這樣資料先存在,但販售清單不一定全部上架。

Day24WeaponShopOrganizer.cs 第 80 到 119 行是武器匠對話資料。
這段使用 BlacksmithLines 陣列,把主角和武器匠的多句台詞整理起來,再寫入 NpcDialogueInteraction。
對話前半用主角提問引出 Boss、拳套和符文設定,說明主角不是去找刀劍,而是需要能承受符文力量的拳套。
中段讓武器匠說明赤鋒符文、雷痕符文和森林五色寶光之間的關係。最後收束到下一步任務,讓玩家前往森林調查。這段不是單純的系統說明,而是劇情對話。主角會追問自己買不起裝備、森林寶光和符文用途,讓任務推進比較自然。


第 175 到 223 行是建立武器匠 NPC 與互動區的流程。
程式先建立或找到 WeaponShopNPCs 根物件,讓 NPC 和互動區集中放在同一個分組底下。
接著建立 BlacksmithNPC,指定武器匠 Sprite、排序層級和位置,讓他顯示在武器匠鋪櫃台附近。
NPC 本體會加入 BoxCollider2D,而且不是 Trigger,用來阻擋玩家。
然後另外建立 BlacksmithInteractionArea,加上 Trigger 碰撞箱,作為玩家按 E 觸發劇情對話的範圍。
最後把 NpcDialogueInteraction 掛到互動區,並呼叫對話設定函式,把武器匠劇情內容寫進 Inspector。
這段工具做的就是正常 Unity 操作自動化:建立 NPC、本體碰撞、互動 Trigger,再掛上對話。

第 226 到 235 行是測試用任務階段工具。
它會呼叫 EnsureMainQuestState(MainQuestStage.AskBlacksmith),把目前主線階段設成 AskBlacksmith。
這個工具只用在測試。
正式流程中,AskBlacksmith 會由第二次村長對話自然推進;測試時才直接把任務階段設成這個狀態,方便在武器匠鋪場景中按 Play 檢查對話。這種工具很實用,但文章裡要講清楚它不是正式玩法。

第 530 到 544 行負責設定玩家初始背包。
程式會找到或建立 PlayerInventory,設定起始金幣,並把 startingWeapons 陣列填入練習拳套與裂紋符文。
這樣玩家進入拳套符文系統時不是空資料。
這一步很重要。
如果玩家一開始沒有任何拳套或符文,就算商店和背包都做好,也很難進入 Day25 的森林測試。給玩家一個練習拳套和低階符文,可以讓他先去森林清小怪,之後再累積金幣購買赤鋒符文。

第 550 到 578 行建立 WeaponShopTradingArea。
程式會建立或找到交易區物件,設定位置和大小,加入 BoxCollider2D,並勾選 Is Trigger。
接著掛上 WeaponShopInteraction,把互動提示設定為:
按 T 打開拳套與符文交易
販售清單大小設成 8,依序寫入普通拳套、精英拳套、低階符文、精英符文與赤鋒符文。
這表示交易區是獨立 Trigger。
玩家站進交易區後按 T,才會打開商店。交易不和 NPC 對話共用同一個互動區,這樣操作比較清楚,也比較不會互相干擾。

第 708 到 739 行是武器匠對話序列與任務推進設定。
程式會找到 NpcDialogueInteraction 的序列化欄位,設定武器匠預設名稱與互動提示。
接著啟用任務階段對話序列,設定這段對話只在 AskBlacksmith 階段出現。
對話完成後,objectiveTextOnComplete 會設定為森林調查目標,並把 questStageOnComplete 推進到 ForestInvestigation。
最後,程式會把 BlacksmithLines 中的多說話者台詞逐句寫入 speakerLines,讓對話框能顯示主角與武器匠輪流說話。
這段就是避免劇情跳關的核心。
武器匠不會太早透露符文情報,對話完成後也會正確把玩家導向森林。

WeaponQuality.cs 定義四種品質:
Common
Elite
Epic
Legendary
雖然檔名仍然沿用舊系統,但這個 enum 目前可以用在拳套與符文品質上。
普通與精英用於刷小怪與過渡,史詩用於森林精英怪,傳說用於洞穴 Boss 主線。
未來如果要整理命名,可以改成 EquipmentQuality,但 Day24 先維持現有名稱,避免同一天為了潔癖把整個系統翻掉。這叫克制,對開發者來說是罕見美德。

WeaponItem.cs 雖然檔名仍叫 Weapon,但正式設計已經改成拳套與符文。
程式中加入 EquipmentKind,用 Gauntlet 和 Rune 區分拳套與符文,避免所有裝備都被當成同一種武器。
每個道具包含:
weaponId
displayName
itemType
quality
icon
damage
buyPrice
sellPrice
對拳套來說,damage 代表基礎拳擊傷害。
對符文來說,damage 代表額外傷害加成。
商店、背包與戰鬥系統都可以透過這份資料判斷道具用途。

第 47 到 85 行的 NormalizeForCurrentStory() 是版本整理用的函式。
因為前面曾經做過舊版武器資料,所以這裡需要把舊 id 或舊名稱轉成新版拳套與符文。
例如舊資料可以被轉成練習拳套、皮革拳套、裂紋符文、赤鋒符文或雷痕符文。
這樣做可以避免商店、掉落或背包還殘留不符合新劇情的名稱。
如果劇情已經改成拳套符文,但背包裡還出現舊版傳說武器,那就像兩個版本的世界觀在同一個 UI 裡打架。很熱鬧,但不專業。






PlayerInventory.cs 是拳套與符文系統的背包核心。它不只是存放玩家有哪些道具,還要記錄目前裝備中的拳套、目前鑲嵌的符文,以及最後計算出來的拳擊總傷害。
在第 20 到 31 行,程式記錄目前拳套、目前符文、起始金幣與起始道具。這些欄位讓背包知道玩家現在穿戴的是哪一個拳套、哪一枚符文,也讓交易 UI 和戰鬥系統能讀取目前裝備狀態。
第 79 到 106 行是購買商品的流程。TryBuyWeapon() 會先檢查玩家金幣是否足夠,如果金幣不足,就回傳提示訊息;如果金幣足夠,才會扣除金幣,並把商品複製進玩家背包。這樣商店不需要自己管理玩家金錢,只要把購買請求交給背包系統判斷。
第 112 到 151 行是出售背包道具。TrySellWeaponAt() 會根據背包格子出售指定道具,賣出後增加玩家金幣。如果玩家賣掉的是目前裝備中的拳套或符文,程式也會同步清掉或修正裝備索引,避免背包裡道具已經不見了,但角色還顯示自己裝備著它。這種幽靈裝備聽起來很玄幻,但在程式裡只會變成 Bug。
第 158 到 181 行是裝備拳套或鑲嵌符文。TryEquipWeaponAt() 會先判斷道具種類,如果是拳套,就設為目前拳套;如果是符文,就設為目前符文。這樣拳套和符文可以同時存在,而不是互相覆蓋。這點很重要,因為新版裝備系統的核心就是「拳套作為載體,符文提供力量」。
第 186 到 224 行則提供目前裝備與傷害查詢。GetEquippedGauntlet() 會回傳目前拳套,GetEquippedRune() 會回傳目前符文,GetAttackDamage() 則會把拳套基礎傷害和符文加成合併成最後拳擊傷害。後面的森林戰鬥、商店 UI、掉落系統都會讀取這裡的結果。
所以 PlayerInventory 不只是背包列表。它是拳套與符文系統的資料中心:買賣、裝備、鑲嵌、金幣、目前傷害,都會從這裡統一處理。













WeaponShopInteraction.cs 是武器匠鋪交易區的核心腳本。它不是掛在武器匠 NPC 本體上,而是掛在櫃台附近的 WeaponShopTradingArea Trigger 上。這樣玩家必須站進交易區,按 T 才會打開買賣畫面;而 E 仍然保留給 BlacksmithInteractionArea 的劇情對話。
第 4 到 8 行定義交易腳本的基本欄位,包含互動提示 interactPrompt 和商店販售清單 weaponsForSale。這些欄位會顯示在 Inspector 裡,方便在 Unity 中調整交易提示和商品內容。
第 32 到 38 行是啟動時的初始化。程式會把 BoxCollider2D 設為 Trigger,整理販售商品資料,並確保場上有 PlayerInventory。這樣交易區不負責阻擋玩家,只負責偵測玩家是否進入範圍。
第 40 到 57 行是交易開關邏輯。程式每幀檢查玩家是否在交易範圍內,如果玩家在範圍內按下 T,就開啟或關閉交易畫面;如果按下 Esc,就關閉商店。這讓交易操作和 NPC 對話分開,不會按 E 時又聊天又開商店,避免互動系統當場精神分裂。
第 60 到 75 行處理玩家進出 Trigger。玩家進入交易範圍時,playerInRange 會變成 true;離開交易範圍時會變回 false,商店也會自動關閉。這樣玩家離開櫃台後,交易畫面不會還掛在螢幕上,像武器匠遠端追著你推銷。
第 77 到 141 行使用 OnGUI() 畫出交易面板。面板上方會顯示標題 拳套與符文,以及玩家金幣、目前拳套、目前符文和拳擊總傷害。下方分成左右兩欄,左邊是武器匠販售清單,右邊是玩家背包清單。
第 143 到 153 行負責左側的 武器匠販售 清單。每一列會顯示商品圖示、名稱、種類、品質、威力與價格。玩家按下 購買 後,會呼叫 PlayerInventory.TryBuyWeapon(),由背包系統判斷金幣是否足夠,並決定是否把商品加入背包。
第 156 到 179 行負責右側的 玩家背包 清單。每一列會顯示背包中的道具,並提供 裝備 / 鑲嵌 和 出售 按鈕。如果玩家按下裝備或鑲嵌,會呼叫 TryEquipWeaponAt();如果按下出售,則呼叫 TrySellWeaponAt()。
第 181 到 192 行負責從 WeaponItem 載入圖示並畫在交易列上。這讓交易畫面不只是文字列表,而是能顯示拳套與符文圖示。至少商店看起來比較像商店,不像一份冷冰冰的報價單。
第 202 到 235 行用碰撞範圍與玩家位置判斷玩家是否仍然在交易區內。這是為了避免玩家已經離開櫃台,但商店 UI 還開著。交易介面應該跟著玩家位置關閉,不然玩家可以站在森林裡遠端買拳套,武器匠大概會很困惑。
第 283 到 308 行則把品質、拳套 / 符文種類、威力文字與按鈕文字轉成玩家看得懂的中文。也就是把內部 enum 和資料欄位整理成 UI 上能直接閱讀的文字,例如普通、精英、史詩、傳說,以及拳套、符文、裝備、鑲嵌等顯示文字。
整體來看,WeaponShopInteraction 只負責交易區偵測、UI 顯示與按鈕流程。真正的金幣扣除、背包增減、裝備拳套、鑲嵌符文和總傷害計算,都交給 PlayerInventory 處理,這樣商店 UI 和背包資料分工比較清楚,。
到這裡,Day24 應該達成的狀態是:
玩家可以從村莊進入武器匠鋪。
玩家可以從武器匠鋪回到村莊。
武器匠 NPC 有本體碰撞箱。
武器匠對話區可以按 E 觸發。
武器匠對話只在 AskBlacksmith 階段出現。
對話完成後任務推進到 ForestInvestigation。
店內有 WeaponShopTradingArea。
玩家可以按 T 打開拳套與符文交易畫面。
商店販售拳套、低階符文、精英符文與赤鋒符文。
雷痕符文保留給森林深處寶箱,不在商店販售。
Day24 完成後,Day25 就能進入森林戰鬥。
玩家先用普通拳套和低階符文刷小怪,累積金幣後回武器匠鋪購買赤鋒符文,再準備挑戰森林精英怪。
也就是說,Day24 是拳套符文主線的轉折點。
它把主線從村莊調查推進到森林探索,也把裝備系統從舊版武器改成拳套與符文。接下來森林不只是下一張地圖,而是玩家刷金幣、累積裝備、準備挑戰精英怪的第一個危險區域。